//这里是pinia的登录状态管理
//使用Pinia存储登录状态（用户名、Token）
import {defineStore} from "pinia";//定义一个子仓库
import {login} from "@/api/login"//导入登录接口
import {ElMessage} from "element-plus";
//定义并暴露一个 store  count类似于id值，推荐和 文件名一致
export const useLoginStore = defineStore('login',{
  //真正存储数据的地方
  state:()=>({
    // id:"1",
    id:Number(sessionStorage.getItem("id")??""),
    //getItem：直接从浏览器的本地存储拿值，给pinia做初始化，也就是把值放在pinia里让pinia一开始就有值
    username:sessionStorage.getItem("username")??"",// 从浏览器存储里读取用户名
    token:sessionStorage.getItem("token")??"",// 从浏览器存储里读取Token

    menuRefreshFlag:0
    // menuId:""
  }),
  actions:{
    loginAction(loginForm){
      return login(loginForm).then(res=>{//调用登录接口

// 2. 关键修复：同步更新Pinia状态（之前缺少这一步）
        // 更新token
        this.id = Number(res.data.id);       // 更新id
        this.username = res.data.username;   // 更新用户名
        this.token = res.data.token;

        // this.username=res.data.username
        // this.token=res.data.token
        //注意：key是字符串，value也是字符串，如果你向放对象进取需要使用json进行转换
        // 存储登录信息到sessionStorage（刷新页面不丢失）
        //setItem：把修改后的新值存到浏览器里，然后再手动同步到pinia里，确保与浏览器值一样，首次登录先set
        sessionStorage.setItem("id",res.data.id)
        sessionStorage.setItem("username",res.data.username)
        sessionStorage.setItem("token",res.data.token)

        return res;
      }).catch(e=>{
     throw e;
    })
  },
  logout() {
    sessionStorage.setItem("id","");
      sessionStorage.setItem("username","");
      sessionStorage.setItem("token","");
      sessionStorage.removeItem("username");
      sessionStorage.removeItem("token");
      this.id=0;
      this.username = "";
      this.token = "";
    },
    triggerMenuRefresh() {
      this.menuRefreshFlag++
    },
}
})
export default useLoginStore
